package main

import (
	"fmt"
	"time"
)

func main() {
	numChan2 := make(chan int, 10)
	//写
	go func() {
		for i := 0; i < 50; i++ {
			numChan2 <- i
			fmt.Println("写入数据", i)
		}
		fmt.Println("数据全面写完毕，准备关闭管道")
		close(numChan2)
		//close(numChan2)//重复关闭，会崩溃
		//numChan2<-10//关闭之后再写数据，崩溃
	}()
	//在遍历管道时，只返回一个值
	//for range时不知道管道是否已经写完了，所以会一直在这里等待
	//在写入端，将管道关闭，for range遍历关闭的管道时，会退出
	for v := range numChan2 {
		fmt.Println("读取数据：", v)
	}
	time.Sleep(3 * time.Second)
	i := <-numChan2
	fmt.Println("已经关闭之后，继续读取：", i)

	fmt.Println("OVER!")

}
